GitHub ActionsでPlaywright E2Eテストを定期実行し、結果をSlack通知する
情報システム室の進地@日比谷です。
Playwrightで実装したE2Eテストを定期実行する際に、GitHub Actionsを使うととても簡単でした。Slackへの通知も簡単にできるモジュールがありましたので、ご紹介します。
シェルコマンドを定期実行する方法としてのGitHub Actions
コマンド(シェルコマンド)を定期実行する方法には様々な方法があります。
- 人間が手動で頑張る
- 専用サーバを立ててcronを実行
- EC2を立ててcronを実行
- AWS Systems Managerでステートマネージャを使ってスケジュールを組み、EC2上で実行
- Amazon EventBridgeでスケジュールを組み、EC2やLambda、StepFunctionsなどで実行
- etc...
しかし、いずれも面倒くさい
です。
とにかく、EC2を立てたくないですし、Lambdaをわざわざ実装もしたくありません(15分という実行時間制限もある)。
この点、GitHub Actionsはサーバレスで簡単にPlaywrightの実行環境を用意でき、定期実行ができます。おすすめです。
Playwrightを定期実行させるGitHub Actionsワークフローの定義(サンプル)
$ npx playwright test
でE2Eテストが走るPlaywrightのテストケースが既に実装されているものとします。
このコマンドを毎日9:00と18:00に実行するGitHub Actionsワークフローのサンプルを示します。
# ワークフロー名
name: periodic_exec
on:
schedule:
# 定期実行する時間(日本時間との時差を考慮して-9時間した値を設定する)
- cron: '0 0 * * *'
- cron: '0 9 * * *'
jobs:
build:
runs-on: ubuntu-latest
# 実行する処理&コマンド指定
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- name: Install Playwright
run: npx playwright install --with-deps
- name: Run E2E Testing
env:
# 必要な環境変数があれば記載する
SOME_ENV1: ${{ secrets.SOME_ENV1 }}
SOME_ENV2: ${{ secrets.SOME_ENV2 }}
run: |
npx playwright test
これで、on->scheduleブロックで設定したタイムスケジュールで定期実行されるようになります。
日本時間の9時に実行するには-9時間した0時を指定する必要があることに留意してください。
また、テスト実行に必要な環境変数があれば、env
ブロックでシークレット等から読み出してセットしておきます。
テスト結果をSlackで簡単に通知する
playwright-slack-reportを使うと簡単です。
$ npm install playwright-slack-report -D
して、インストールした後、playwright.config.ts
のreporterブロックに下記のような記述を追加します。
reporter: [
[
"./node_modules/playwright-slack-report/dist/src/SlackReporter.js",
{
channels: ["notify-channel-1", "notify-channel-2"], // provide one or more Slack channels
sendResults: "always", // "always" , "on-failure", "off"
maxNumberOfFailuresToShow: 100,
showInThread: true,
slackLogLevel: "INFO",
},
],
],
ここでは、notify-channel-1
、notify-channel-2
の2つのチャンネルにE2Eテストの結果の成否を問わず(always
)通知する。INFOレベルもキャッチして、詳細はスレッドで表記し、100件のエラーまで表示する設定としています。
ここまで準備したら、npx playwright test
の実行時に環境変数SLACK_BOT_USER_OAUTH_TOKEN
にSlackのBotユーザのOAuthトークンを指定して、実行します。環境変数は先の説明の通り、シークレットに指定しておいた値をenv
ブロックにて読み出してセットすればOKです。
実行すると、次の画像のようなSlack通知を得られます。通知先のチャンネルはパブリックチャンネルである必要があるので留意してください。